package com.itany.corejava.code17_设计模式.工厂模式;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

/**
 * @author MissChen
 * @date 2024年03月28日 9:52
 */
public class ObjectFactory {
    private static Map<String,Object> objs;
    static{
        objs=new HashMap<>();
        try {
            BufferedReader br=new BufferedReader(
                    new InputStreamReader(
                            ObjectFactory.
                            class.getClassLoader()
                            .getResourceAsStream("objs.properties")
                    )
            );
            String line=null;
            while((line=br.readLine())!=null){
                //考虑空行,空行不解析
                // 每一行对应一个对象
                if(!"".equals(line)){
                    String[] arr=line.split("=");
                    String key=arr[0];
                    String value=arr[1];
                    //存储到集合中取，value表示的是对象所在的类的包名.类名
                  Class c= Class.forName(value);

                  //通过反射调用对应类的无参构造方法创建对象
                  Object obj=c.newInstance();
                  objs.put(key,obj);
                }
            }
        } catch (Exception e) {
            throw  new ExceptionInInitializerError("ObjectFactory初始化失败");
        }

    }

    public static Object getObject(String key){
        Object obj=objs.get(key);
        if(obj==null){
            System.out.println("根据对应的key:"+key+"在配置文件中没有找到对应的配置");
            return null;

        }
        return obj;
    }


}
